package fr.gfi.agraf.service.mapper;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Set;

import org.apache.commons.lang3.time.DateUtils;
import org.springframework.util.CollectionUtils;

import fr.gfi.agraf.persistence.entity.Saisie;
import fr.gfi.agraf.persistence.entity.Tache;
import fr.gfi.agraf.vue.bean.SaisieDTO;

/**
 * @author Zakaria
 *
 */
public class SaisieMapper {

	/**
	 * Constructeur
	 */
	private SaisieMapper() {
		// Empty constructeur
	}

	/**
	 * Convertit Dto to entity
	 * 
	 * @param saisieDTO
	 * @return
	 */
	public static Saisie dtoToEntity(final SaisieDTO saisieDTO, final Tache tache) {
		final Saisie saisie = new Saisie();
		saisie.setId(saisieDTO.getId());
		saisie.setConsomme(saisieDTO.getConsomme());
		saisie.setDate(saisieDTO.getDate());
		saisie.setEtat(EtatMapper.dtoToEntity(saisieDTO.getEtat()));
		saisie.setRaf(saisieDTO.getRaf());
		saisie.setTache(tache);
		if (saisieDTO.isValidee()) {
			saisie.setValidee('1');
		} else {
			saisie.setValidee('0');
		}
		return saisie;
	}

	/**
	 * Convertit Dto to entity liste
	 * 
	 * @param saisieSet
	 * @return
	 */
	public static List<SaisieDTO> entityToDTOList(final Set<Saisie> saisieSet) {
		final List<SaisieDTO> saisieDTOList = new ArrayList<SaisieDTO>();
		if (!CollectionUtils.isEmpty(saisieSet)) {
			for (final Saisie saisie : saisieSet) {
				saisieDTOList.add(entityToDTO(saisie));
			}
		}
		return saisieDTOList;
	}

	/**
	 * Convertit une entity en DTO avec la date
	 * 
	 * @param saisieSet
	 * @param date
	 * @return
	 */
	public static SaisieDTO entityListToDTOUnitary(final Set<Saisie> saisieSet, final Date date) {
		SaisieDTO saisieDTO = null;
		if (!CollectionUtils.isEmpty(saisieSet)) {
			for (final Saisie saisie : saisieSet) {
				if (date != null && DateUtils.isSameDay(saisie.getDate(), date)) {
					saisieDTO = entityToDTO(saisie);
				}
			}
		}
		return saisieDTO;
	}

	/**
	 * Convertit une entity en dto
	 * 
	 * @param saisie
	 * @return
	 */
	public static SaisieDTO entityToDTO(final Saisie saisie) {
		final SaisieDTO saisieDTO = new SaisieDTO();
		saisieDTO.setId(saisie.getId());
		saisieDTO.setConsomme(saisie.getConsomme());
		saisieDTO.setDate(saisie.getDate());
		saisieDTO.setEtat(EtatMapper.entityToDto(saisie.getEtat()));
		saisieDTO.setRaf(saisie.getRaf());
		saisieDTO.setValidee('1' == saisie.getValidee());
		return saisieDTO;
	}
}
